﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Text;
using System.Security.Cryptography;

namespace Proyecto_e.Models
{
    public class ModeloUsuario
    {
        [Required]
        public string login { set; get; }
        [Required]
        public string password { set; get; }
        [Required]
        public string nombres { set; get; }
        [Required]
        public string apellidos { set; get; }
        [Required]
        public string edad { set; get; }
        [Required]
        public string sexo { set; get; }
        [Required]
        public string email { set; get; }
        [Required]
        public string telefono { set; get; }

        proyecto_eEntities1 proyecto = new proyecto_eEntities1();
        proyecto_eEntities1 entidades = new proyecto_eEntities1();

        public bool loguear(string login, string password)
        {
            string cifrada = EncodePassword(password);
            try
            {
                var pertologin = proyecto.usuario.First(n => n.LOGIN == login);
                if (pertologin.LOGIN == login && pertologin.PASSWORD == cifrada)
                {
                    return true;
                }
            }
            catch
            {
                return false;
            }
            return false;
        }

        public string EncodePassword(string originalPassword)
        {
            //Declarations
            Byte[] originalBytes;
            Byte[] encodedBytes;
            MD5 md5;

            //Instantiate MD5CryptoServiceProvider, get bytes for original password and compute hash (encoded password)
            md5 = new MD5CryptoServiceProvider();
            originalBytes = ASCIIEncoding.Default.GetBytes(originalPassword);
            encodedBytes = md5.ComputeHash(originalBytes);

            //Convert encoded bytes back to a 'readable' string
            return BitConverter.ToString(encodedBytes);
        }

        public void insertarBD(string login, string password, string nombres, string apellidos, string edad, string sexo, string email, string telefono)
        {
            usuario nuevo = new usuario();
            nuevo.LOGIN = login;
            string cifrada = EncodePassword(password);
            nuevo.PASSWORD = cifrada;
            nuevo.NOMBRES = nombres;
            nuevo.APELLIDOS = apellidos;
            nuevo.SEXO = sexo;
            nuevo.EDAD = 0;
            nuevo.EMAIL = email;
            nuevo.TELEFONO = telefono;
            proyecto.AddTousuario(nuevo);
            proyecto.SaveChanges();    
        }

        public void eliminarBD(int id)
        {
            var pertodelete = proyecto.usuario.First(n => n.ID_USUARIO == id);
            proyecto.DeleteObject(pertodelete);
            proyecto.SaveChanges();
        }

        public object delallarBD(int id)
        {
            var perdetails = (from n in proyecto.usuario where n.ID_USUARIO == id select n).First();
            return perdetails;
        }

        public List<usuario> listarBD()
        {
            return proyecto.usuario.ToList();
        }

        public List<encuesta> listareBD()
        {
            return proyecto.encuesta.ToList();
        }

        public string ObtenerContrasena(string email)
        {

            string consulta = (from n in proyecto.usuario where n.EMAIL == email select n.PASSWORD).First();
            return consulta;
        }

        public bool verificar_login(string login, string contraseña)
        {
            var listado = entidades.usuario.Where("it.LOGIN = '" + login + "' and " + "it.PASSWORD ='" + contraseña + "'");
            if (listado.ToList().Count == 1)
                return true;
            else
                return false;
        }

        public string get_id(string login)
        {
            var listado = entidades.usuario.Where("it.LOGIN = '" + login + "'");
            return listado.First().ID_USUARIO + "";
        }

        public bool verificarusuario(string usuario)
        {
            bool verificacion = false;
            int i = 0;
            string consulta="";
            while (consulta != usuario && i < 50)
            {
                try
                {
                    consulta = (from n in proyecto.usuario where n.ID_USUARIO == i select n.LOGIN).First();
                    consulta = "";
                    i++;                   
                }
                catch (Exception)
                {
                    i++;
                }             
            }
            if (consulta == usuario)
            {
                verificacion = true;
            }
            return verificacion;
        }
    }
}